package com.springboot.demo.design.pattern.template;

/**
 * 请客吃饭
 * <p>
 * 请客步骤
 * 1、下单
 * 2、烧饭
 * 3、吃饭
 * 4、买单
 * 5、娱乐
 *
 * @author supu
 * @date 2019-07-05 10:28
 **/
public abstract class Dinner {
    /**
     * 是否需要支付钱，默认是需要付钱的
     */
    protected boolean isPay = true;

    protected void order() {
        System.out.println("点菜下单");
    }

    protected abstract void cooking();

    protected abstract void eating();

    /**
     * 钩子方法，子类可以重写，控制是否需要付钱
     *
     * @param isPay
     */
    protected void isPay(boolean isPay) {
        this.isPay = isPay;
    }

    protected void payMoney() {
        if (isPay) {
            System.out.println("买单了");
        }
    }

    protected void play() {
        System.out.println("唱歌");
    }

    protected void dinner() {
        // 1 下单
        order();
        // 2 烧饭
        cooking();
        // 3 吃饭
        eating();
        // 4 买单
        payMoney();
        // 5 娱乐
        play();
    }
}
